/* eslint-disable */
import axios from 'axios'

// 配置axios基础URL
const API_BASE_URL = 'http://localhost:8081/api'

// 创建axios实例
const apiClient = axios.create({
  baseURL: API_BASE_URL,
  timeout: 10000,
  headers: {
    'Content-Type': 'application/json'
  }
})

// 请求拦截器
apiClient.interceptors.request.use(
  config => {
    console.log('发送请求:', config.method?.toUpperCase(), config.url)
    return config
  },
  error => {
    console.error('请求错误:', error)
    return Promise.reject(error)
  }
)

// 响应拦截器
apiClient.interceptors.response.use(
  response => {
    console.log('收到响应:', response.status, response.config.url)
    // 后端返回的数据格式: { success: boolean, message: string, data: any }
    if (response.data && response.data.success) {
      return response.data.data
    } else {
      throw new Error(response.data?.message || '请求失败')
    }
  },
  error => {
    console.error('响应错误:', error)
    if (error.response) {
      // 服务器返回错误状态码
      const message = error.response.data?.message || `请求失败: ${error.response.status}`
      throw new Error(message)
    } else if (error.request) {
      // 请求发送失败
      throw new Error('网络连接失败，请检查后端服务是否启动')
    } else {
      // 其他错误
      throw new Error(error.message || '未知错误')
    }
  }
)

// 合集字典数据（前端定义）
const COLLECTION_DICTIONARY = [
  {
    id: 'tech',
    name: '技术文章',
    description: '技术相关的文章内容',
    color: '#409EFF'
  },
  {
    id: 'life', 
    name: '生活感悟',
    description: '生活相关的心得体会',
    color: '#67C23A'
  },
  {
    id: 'travel',
    name: '旅行游记', 
    description: '旅行见闻和游记',
    color: '#E6A23C'
  },
  {
    id: 'study',
    name: '学习笔记',
    description: '学习过程中的笔记和总结',
    color: '#F56C6C'
  },
  {
    id: 'work',
    name: '工作随笔',
    description: '工作中的思考和记录',
    color: '#909399'
  },
  {
    id: 'other',
    name: '其他',
    description: '其他类型的文章',
    color: '#C0C4CC'
  }
]

// 合集API类
class CollectionAPI {
  // 获取所有合集
  async getAll() {
    try {
      const collections = await apiClient.get('/collections')
      return collections
    } catch (error) {
      console.error('获取合集列表失败:', error)
      throw error
    }
  }

  // 根据ID获取合集
  async getById(id) {
    try {
      const collection = await apiClient.get(`/collections/${id}`)
      return collection
    } catch (error) {
      console.error('获取合集详情失败:', error)
      throw error
    }
  }

  // 获取合集统计信息（包含文章数量）
  async getStats() {
    try {
      const stats = await apiClient.get('/collections/stats')
      return stats
    } catch (error) {
      console.error('获取合集统计失败:', error)
      throw error
    }
  }

  // 创建合集
  async create(collectionData) {
    try {
      const collection = await apiClient.post('/collections', collectionData)
      return collection
    } catch (error) {
      console.error('创建合集失败:', error)
      throw error
    }
  }

  // 更新合集
  async update(id, updateData) {
    try {
      const collection = await apiClient.put(`/collections/${id}`, updateData)
      return collection
    } catch (error) {
      console.error('更新合集失败:', error)
      throw error
    }
  }

  // 删除合集
  async delete(id) {
    try {
      await apiClient.delete(`/collections/${id}`)
    } catch (error) {
      console.error('删除合集失败:', error)
      throw error
    }
  }

  // 启用/禁用合集
  async toggleStatus(id, enabled) {
    try {
      const collection = await apiClient.patch(`/collections/${id}/status`, null, {
        params: { enabled }
      })
      return collection
    } catch (error) {
      console.error('更新合集状态失败:', error)
      throw error
    }
  }

  // 更新合集排序
  async updateSortOrder(id, sortOrder) {
    try {
      const collection = await apiClient.patch(`/collections/${id}/sort`, null, {
        params: { sortOrder }
      })
      return collection
    } catch (error) {
      console.error('更新合集排序失败:', error)
      throw error
    }
  }

  // 检查合集名称是否存在
  async checkNameExists(name, excludeId) {
    try {
      const exists = await apiClient.get('/collections/check-name', {
        params: { name, excludeId }
      })
      return exists
    } catch (error) {
      console.error('检查合集名称失败:', error)
      throw error
    }
  }
  
  // 获取合集选项（用于下拉选择）
  async getOptions() {
    try {
      const collections = await this.getAll()
      return [
        { label: '未分类', value: '', color: '#C0C4CC' },
        ...collections.map(collection => ({
          label: collection.name,
          value: collection.id,
          color: collection.color,
          description: collection.description
        }))
      ]
    } catch (error) {
      console.error('获取合集选项失败:', error)
      return [{ label: '未分类', value: '', color: '#C0C4CC' }]
    }
  }
  
  // 获取筛选选项（用于筛选器）
  async getFilterOptions() {
    try {
      const collections = await this.getAll()
      return [
        { label: '全部合集', value: 'all' },
        { label: '未分类', value: '' },
        ...collections.map(collection => ({
          label: collection.name,
          value: collection.id
        }))
      ]
    } catch (error) {
      console.error('获取合集筛选选项失败:', error)
      return [{ label: '全部合集', value: 'all' }]
    }
  }
  
  // 验证合集ID是否有效
  validateCollectionId(collectionId) {
    if (!collectionId || collectionId === '') {
      return true // 空值表示未分类，是有效的
    }
    
    return COLLECTION_DICTIONARY.some(c => c.id === collectionId)
  }
  
  // 根据合集ID获取合集名称
  getCollectionName(collectionId) {
    if (!collectionId || collectionId === '') {
      return '未分类'
    }
    
    const collection = COLLECTION_DICTIONARY.find(c => c.id === collectionId)
    return collection ? collection.name : '未知合集'
  }
  
  // 根据合集ID获取合集颜色
  getCollectionColor(collectionId) {
    if (!collectionId || collectionId === '') {
      return '#C0C4CC' // 未分类的颜色
    }
    
    const collection = COLLECTION_DICTIONARY.find(c => c.id === collectionId)
    return collection ? collection.color : '#C0C4CC'
  }
}

// 创建实例并导出
export const collectionApi = new CollectionAPI()

// 同时导出字典数据和API类
export { COLLECTION_DICTIONARY, CollectionAPI }